package com.yuanzi.base.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * redis缓存处理注解
 * @author chengshx
 * @date 2017年5月16日
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@Documented
public @interface RedisCache {
	
	public enum ActionType {
		ADD, // 添加缓存
		DEL, // 删除缓存
		/**
		 * 不知道怎么清除key时，就使用这个类型加入一个组。例如返回值是分页、集合、Map时
		 */
		ADD_GROUP, 
	}

	public enum CacheType {
		STRING, // string类型
		HASH    // hash类型
	}
	
	/** 缓存操作类型，添加或删除，默认添加 */
	public ActionType actionType() default ActionType.ADD;
	/** 缓存类型，默认hash类型 */
	public CacheType cacheType() default CacheType.HASH;
	/** 实体类型缓存 */
	public Class<?> cacheClas() default RedisCache.class;
	/** 自定义缓存 */
	public String cacheName() default "";
	/** key的层级数，指定方法中的前几个参数作为缓存的key */
	public int keyNum() default 1;
}
